package negocios;

import java.util.Date;

import negocios.excecoes.EntradaInvalidaException;

/**
 * Classe que implementa um tipo especifico de mensagem, onde o remetente e um
 * telefone, e ha limite no tamanho do texto.
 * 
 * @author Jonathan Brilhante
 * @author Jose Rafael
 * @author Nata Venancio
 * @author Renato Almeida
 * 
 * @version 2.0
 */

public class SMS extends MensagemAbstrata {
	private static final int LIMITE_CONTEUDO = 200;
	private String conteudo;

	/**
	 * Cria uma mensagem SMS de correio eletronico, com um assunto padrao de SMS
	 * 
	 * @param remetente
	 *            o remetente do SMS
	 * @param para
	 *            o telefone do receptor
	 * @param conteudo
	 *            a mensagem enviada pelo usuario, com no maximo 200 caracteres
	 * @throws EntradaInvalidaException
	 *             caso o tamanho da mensagem seja acima do permitido
	 */
	public SMS(String remetente, String para, String conteudo)
			throws EntradaInvalidaException {
		this(remetente, para, conteudo, new Date());
	}

	/**
	 * Cria uma mensagem SMS de correio eletronico, com um assunto padrao de SMS
	 * 
	 * @param telefone
	 *            o telefone do remetente
	 * @param para
	 *            o telefone do receptor
	 * @param conteudo
	 *            a mensagem enviada pelo usuario, com no maximo 200 caracteres
	 * @param data
	 *            a data de envio
	 * @throws EntradaInvalidaException
	 *             caso o tamanho da mensagem seja acima do permitido
	 */
	public SMS(String telefone, String para, String conteudo, Date data)
			throws EntradaInvalidaException {
		super(telefone, para, "Voce recebeu um SMS via I'm Here", data);
		if (conteudo.length() > LIMITE_CONTEUDO) {
			throw new EntradaInvalidaException("Conteudo acima do limite");
		}
		this.conteudo = conteudo;
	}

	protected String corpo() {
		return ENDL + this.getConteudo();
	}

	public String getConteudo() {
		return conteudo;
	}

	public boolean equals(Object objeto) {
		if (!(objeto instanceof SMS)) {
			return false;
		}
		SMS outra = (SMS) objeto;
		return super.equals(objeto)
				&& getConteudo().equals(outra.getConteudo());
	}
}